package AnaliseSemantica;

import java.util.ArrayList;
import java.util.HashMap;
import ArvoreSintatica.IdentifierType;
import ArvoreSintatica.Type;

public class Metodo {

	private HashMap<Simbolo, Type> variaveis;
	private Type tipoRetorno;
	private Simbolo name;
	private Type[] tiposParametros;
	private Simbolo[] parametros;

	public Metodo(Simbolo m, Type returnType, ArrayList<String> arguments) {
		variaveis = new HashMap<Simbolo, Type>();
		name = m;
		tipoRetorno = returnType;
		tiposParametros = new Type[arguments.size() / 2];
		parametros = new Simbolo[arguments.size() / 2];
		for (int i = 0; i < arguments.size(); i = i + 2) {
			tiposParametros[i / 2] = new IdentifierType(Simbolo.symbol(
					arguments.get(i)).toString());
			parametros[i / 2] = Simbolo.symbol(arguments.get(i + 1));
			variaveis.put(parametros[i / 2], tiposParametros[i / 2]);
		}
	}

	public void addVariable(Simbolo variable, Type type) {
		variaveis.put(variable, type);
	}

	public Type getReturnType() {
		return tipoRetorno;
	}

	public HashMap<Simbolo, Type> getVariables() {
		return variaveis;
	}

	public Type[] getPramsType() {
		return tiposParametros;
	}

	public String toString() {
		return name.toString();
	}
}
